import java.util.Scanner;

public class Day40 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int[] heights = new int[n];
            for (int i = 0; i < n; i ++) {
                heights[i] = in.nextInt();
            }
            // 创建DP表，dp[i] 表示以 i 结尾的最长子序列长度
            // 因为以 i 结尾的子序列最小为 1，所以这里初始化为全1
            // 状态转移方程：
            // 对于每个height[i]，通过遍历height[0]~height[i-1]
            // 之间的数 据，如果在该区间中找到一个 height[j]比height[i]
            // 小的元素，开始比较f[j]+1和f[i]的大小:
            // 如果f[j]+1>f[j]则更新f[i],因此：
            //      当height[i] > height[j]: f[i] = max(f[i], f[j]+1)
            //      当height[i] <= height[j]：f[i] = 1 继续取下一个数据
            int[] dp = new int[n];
            int res = 1;
            for (int i = 0; i < dp.length; i ++) dp[i] = 1;
            for (int i = 1; i < dp.length; i ++) {
                for (int j = 0; j < i; j ++) {
                    if (heights[j] < heights[i]) {
                        dp[i] = Math.max(dp[i],dp[j] + 1);
                    }
                }
                res = dp[i] > res ? dp[i]:res;
            }
            System.out.println(res);
        }
    }
}
